package middleware

import (
	"buding-ai/internal/repository/model"
	"buding-ai/internal/web/response"
	"buding-ai/pkg/utils/jwt"
	"github.com/gin-gonic/gin"
)

// AdminAuth 管理员权限验证中间件
// 仅允许角色为超级管理员(1)和管理员(2)的用户访问
func AdminAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 从上下文中获取JWT声明
		claims, exists := c.Get("claims")
		if !exists {
			response.Unauthorized(c, "未认证")
			c.Abort()
			return
		}

		// 将声明转换为JWT声明对象
		jwtClaims, ok := claims.(*jwt.Claims)
		if !ok {
			response.InternalError(c, "无效的JWT声明", nil)
			c.Abort()
			return
		}

		// 验证用户角色
		if jwtClaims.Role != model.SuperAdmin && jwtClaims.Role != model.Admin {
			response.Forbidden(c, "权限不足，需要管理员权限")
			c.Abort()
			return
		}

		c.Next()
	}
}

// SuperAdminAuth 超级管理员权限验证中间件
// 仅允许角色为超级管理员(1)的用户访问
func SuperAdminAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 从上下文中获取JWT声明
		claims, exists := c.Get("claims")
		if !exists {
			response.Unauthorized(c, "未认证")
			c.Abort()
			return
		}

		// 将声明转换为JWT声明对象
		jwtClaims, ok := claims.(*jwt.Claims)
		if !ok {
			response.InternalError(c, "无效的JWT声明", nil)
			c.Abort()
			return
		}

		// 验证用户角色
		if jwtClaims.Role != model.SuperAdmin {
			response.Forbidden(c, "权限不足，需要超级管理员权限")
			c.Abort()
			return
		}

		c.Next()
	}
}
